package skyhyun;

public class J14_Array {
	
	// 배열(Array)
	// 지금까지 우리가 사용한 변수는 하나의 저장영역에 하나의 이름으로 하나의 값만을 저장했었음
	// 만일, 데이터 건수가 여러개인 경우 변수를 여러 개 선언해서 사용해야 함
	// 학생 1 명의 성적처리 : 변수 7개 사용
	// 학생 10 명의 성적처리 : 변수 7 * 10 개 사용
	// 이렇게 하면 작성해야 하는 코드도 많아지고 반복문 사용도 힘들어 짐
	
	// 자바에서는 동일한 자료형의 객체나 기본자료형을 묶어서 배열로 사용할 수 있음
	// 묶어서 group 배열로 사용할 수 있음
	
	// 배열에 속하는 각 개체는 "배열의 구성요소"라 함
	// 배열에서 구성요소의 갯수를 알아내려면 length 필드를 이용
	// 배열의 각 구성요소에 값을 저장하거나 읽으려면 각 구성요소의 index(위치) 를 지정해야 함
	// 배열의 index는 0 부터 시작함
	// 배열은 일단 크기가 정해지면 변경 불가
	
	public static void main(String[] args) {
		
		// 배열을 사용하지 않은 성적처리 프로그램
		int stdn01 = 123456789;							// 학생번호
		int kor1 = 98;													// 국어
		int eng1 = 99;												// 영어
		int mat1 = 98;												// 수학
		
		int stdn02 = 234567890;							// 학생번호
		int kor2 = 98;												// 국어
		int eng2 = 99;												// 영어
		int mat2 = 98;												// 수학
		
		int stdn03 = 345678901;							// 학생번호
		int kor3 = 98;												// 국어
		int eng3 = 99;												// 영어
		int mat3 = 98;												// 수학
		
		int tot1 = kor1 + eng1 + mat1;
		int tot2 = kor2 + eng2 + mat2;
		int tot3 = kor3 + eng3 + mat3;
		
		// 배열을 사용한 성적처리 프로그램
		int stdno[] = new int[3];							// 3명분의 학생번호
		int kor[] = new int[3];
		int eng[] = new int[3];
		int mat[] = new int[3];
		
		// 배열의 구성요소에 값 저장
		stdno[0] = 123456789;
		stdno[1] = 234567890;
		stdno[2] = 345678901;
		
		System.out.println( stdno );
		System.out.println( stdno[0] );
		System.out.println( stdno[1] );
		System.out.println( stdno[2] );
		
		kor[0] = 99;
		kor[1] = 95;
		kor[2] = 88;
		
		System.out.println( kor );
		System.out.println( kor[0] );
		System.out.println( kor[1] );
		System.out.println( kor[2] );
		
		eng[0] = 99;
		eng[1] = 92;
		eng[2] = 93;
		
		System.out.println( eng );
		System.out.println( eng[0] );
		System.out.println( eng[1] );
		System.out.println( eng[2] );
		
		mat[0] = 99;
		mat[1] = 82;
		mat[2] = 77;
		
		System.out.println( mat );
		System.out.println( mat[0] );
		System.out.println( mat[1] );
		System.out.println( mat[2] );
		
		int tot[] = new int[3];
		float avg[] = new float[3];
		for(int i = 0; i <= 2; ++i) {
			tot[i] = kor[i] + eng[i] + mat[i];
			avg[i] = Math.round((float)tot[i] / 3 * 100) / 100f;
		}
		
		System.out.println( tot );
		System.out.println( tot[0] );
		System.out.println( tot[1] );
		System.out.println( tot[2] );
		
		System.out.println( avg );
		System.out.println( avg[0] );
		System.out.println( avg[1] );
		System.out.println( avg[2] );
		
		// 문제 1 : 복권 추첨을 위한 난수 6개를 만들어 myLotto 라는 배열에 저장하고 모두 출력
		// 로또 6/45 에 근거해서 1 - 45 범위내 난수 사용
		
		int myLotto[] = new int[6];
		System.out.print("추첨번호 : ");
		for(int i = 0; i < myLotto.length; ++i) {
			myLotto[i] = (int)(Math.random() * 45) + 1;
			System.out.print(myLotto[i] + "\t");
		}
		System.out.println();
		// 배열 선언 및 값 초기화
		char[] grade = {'수', '우', '미', '양', '가' };
		// char[] grade = new char[5];
		// grade[0] = '수'
		// grade[1] = '우'
		// grade[2] = '미'
		// grade[3] = '양'
		// grade[4] = '가'
		
		for(int i = 0; i < grade.length; ++i) {
			System.out.println(grade[i]);
		}
		
		// Iterating on Array
		// JDK 5 이전에서는 for 문과 배열의 index를 이용해서 배열의 값을 출력했음
		// JDK 5 이상에서는 for 문이 향상되었음
		// 즉, 배열의 index 없이 배열을 반복처리 가능
		// for (배열구성요소자료형 변수명 : 배열명)
		for (char g : grade ) {
			System.out.println(g);
			
		// stdno
		for(int i : stdno) {
			System.out.println(i);
		}
		// kor
		for(int k : kor) {
			System.out.println(k);
		}	
		// eng
		for(int e : eng) {
			System.out.println(e);
		}	
		// mat
		for(int m : mat) {
			System.out.println(m);
		}	
		// myLotto
		for(int L : myLotto) {
			System.out.print(L + "\t");
		}	
			
		
			
		}
		
		
		
		
	}

}
